/*
 * Copyright 2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
'use strict';

var module = angular.module('sba-applications-activiti', [ 'sba-applications' ]);
sbaModules.push(module.name);

module.controller('activitiCtrl', [ '$scope', '$http', 'application', function($scope, $http, application) {
    $scope.application = application;
    $http.get('api/applications/' + application.id + '/activiti').then(function(response) {
        var activiti = response.data;
        $scope.summary = [];
        $scope.summary.push({
            key : 'Completed Task Count Today',
            value : activiti.completedTaskCountToday
        });
        $scope.summary.push({
            key : 'Process Definition Count',
            value : activiti.processDefinitionCount
        });
        $scope.summary.push({
            key : 'Cached Process Definition Count',
            value : activiti.cachedProcessDefinitionCount
        });
        $scope.summary.push({
            key : 'Completed Task Count',
            value : activiti.completedTaskCount
        });
        $scope.summary.push({
            key : 'Completed Activities',
            value : activiti.completedActivities
        });
        $scope.summary.push({
            key : 'Open Task Count',
            value : activiti.openTaskCount
        });
        $scope.processes = [];
        for (var i = 0; i < activiti.deployedProcessDefinitions.length; i++) {
            var process = activiti.deployedProcessDefinitions[i];
            var runningProcessInstanceCount = activiti.runningProcessInstanceCount[process];
            var completedProcessInstanceCount = activiti.completedProcessInstanceCount[process];
            $scope.processes.push({
                name : process,
                running : runningProcessInstanceCount,
                completed : completedProcessInstanceCount
            });
        }
    }).catch(function(response) {
        $scope.error = response.data;
    });
}]);

module.config([ '$stateProvider', function($stateProvider) {
    $stateProvider.state('applications.activiti', {
        url : '/activiti',
        templateUrl : 'applications-activiti/activiti.html',
        controller : 'activitiCtrl'
    });
}]);

module.run([ 'ApplicationViews', '$http', function(ApplicationViews, $http) {
    ApplicationViews.register({
        order : 100,
        title : 'Activiti',
        state : 'applications.activiti',
        show : function(application) {
            if (!application.managementUrl || !application.statusInfo.status || application.statusInfo.status === 'OFFLINE') {
                return false;
            }

            return $http.get('api/applications/' + application.id + '/configprops').then(
                    function(response) {
                        return response.data.processEngineEndpoint !== undefined;
                    }).catch(function() {
                        return false;
                    });
        }
    });
}]);
